/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import io.Adulto;
import io.Calle;
import io.Direccion;
import io.Informante;
import io.Nino_Adolescente;
import io.Operador;
import java.util.List;

/**
 *
 * @author NiCo
 */
public class ControladorPersonas {

    public List<Operador> listaOperadores() {
        List<Operador> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT p.* FROM PERSONA p, OPERADOR o WHERE p.id = o.id ", Operador.class).getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public Nino_Adolescente ninio_adolescente(String nombre, String apellido, long dni) {
        Nino_Adolescente nino = null;
        long id;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            id = Long.parseLong(ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM ldld_id_persona('" + nombre + "' , '" + apellido + "' , " + dni + ")").getSingleResult().toString());
            nino = (Nino_Adolescente) ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT p.*, n.edad, n.escuela, n.nivel, n.sexo, n.zona, n.madre_id, n.padre_id FROM PERSONA p, NINO_ADOLESCENTE n WHERE p.id = n.id AND p.id = " + id, Nino_Adolescente.class).getSingleResult();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return nino;
    }

    public Direccion existe_direccion(Calle calle, Integer nroCalle, Integer piso, String dpto) {
        Direccion direccion = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            if (calle == null) {
                long id = Long.parseLong(ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM ldld_direccion('' , " + nroCalle + " , " + piso + " , '" + dpto + "')", Direccion.class).getSingleResult().toString());
                direccion = (Direccion) ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM DIRECCION WHERE id = " + id, Direccion.class).getSingleResult();
            } else {
                long id = Long.parseLong(ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM ldld_direccion('" + calle.getNombre() + "' , " + nroCalle + " , " + piso + " , '" + dpto + "')").getSingleResult().toString());
                direccion = (Direccion) ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM DIRECCION WHERE id = " + id, Direccion.class).getSingleResult();
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return direccion;
    }

    public List<Informante> listaInformates(String nombre, String apellido) {
        List<Informante> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT p.*, i.tipopersona, i.institucionquerepresenta FROM PERSONA p, INFORMANTE i WHERE p.id = i.id AND p.nombre LIKE '%" + nombre + "%' AND p.apellido LIKE '%" + apellido + "%'", Informante.class).getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Nino_Adolescente> listaNinios(String nombre, String apellido) {
        List<Nino_Adolescente> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT p.*, n.edad, n.escuela, n.nivel, n.sexo, n.zona, n.madre_id, n.padre_id FROM PERSONA p, NINO_ADOLESCENTE n WHERE p.id = n.id AND p.nombre LIKE '" + nombre + "%' AND p.apellido LIKE '" + apellido + "%'", Nino_Adolescente.class).getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }
    
    public void actualizarNinio(Nino_Adolescente nino) {
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            Nino_Adolescente aux = ControladorPrincipal.getInstance().getEntity().find(Nino_Adolescente.class, nino.getId());
            aux = ControladorPrincipal.getInstance().getEntity().merge(nino);
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();

        }
    }
    public void actualizarInformante(Informante infor) {
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            Informante aux = ControladorPrincipal.getInstance().getEntity().find(Informante.class, infor.getId());
            aux = ControladorPrincipal.getInstance().getEntity().merge(infor);
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();

        }
    }

    public Adulto existeAdulto(long dni) {
        Adulto madre = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            madre = (Adulto) ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT p.*, a.beneficiario, a.estadocivil, a.lugardetrabajo, a.obrasocial, a.situacionlaboral, a.edad FROM PERSONA p, ADULTO a WHERE p.id = a.id AND p.dni = " + dni, Adulto.class).getSingleResult();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return madre;
    }
    
    public void actualizar(Nino_Adolescente nino) {
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            Nino_Adolescente aux = ControladorPrincipal.getInstance().getEntity().find(Nino_Adolescente.class, nino.getId());
            aux = ControladorPrincipal.getInstance().getEntity().merge(nino);
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();

        }
    }
}